Package org.fto.jthink.sample.mboard

Source Code of org.fto.jthink.sample.mboard.MBoardJBean

/*
* MBoardJBean.java  2005-10-14
*
* 版权所有: 自由思考组织(FTO)软件团队 2000-2005, 保留所有权利.
* 这个软件是自由思考组织(FTO)软件团队开发的,如果要使用这个软件,请首先阅读并接受许可协议。
*
* Copyright 2000-2005 FTO Software Team, Inc. All Rights Reserved.
* This software is the proprietary information of FTO Software Team, Inc.
* Use is subject to license terms.
*
* FTO站点:http://www.free-think.org
*/
package org.fto.jthink.sample.mboard;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.fto.jthink.j2ee.web.HttpRequest;
import org.fto.jthink.jdbc.Column;
import org.fto.jthink.jdbc.Condition;
import org.fto.jthink.jdbc.ConditionItem;
import org.fto.jthink.jdbc.JDBCTransaction;
import org.fto.jthink.jdbc.SQL;
import org.fto.jthink.jdbc.SQLBuilder;
import org.fto.jthink.jdbc.SQLExecutor;
import org.fto.jthink.jdbc.SQLExecutorEvent;
import org.fto.jthink.jdbc.SQLExecutorListener;
import org.fto.jthink.log.LogManager;
import org.fto.jthink.log.Logger;
import org.fto.jthink.resource.ResourceManager;
import org.fto.jthink.sample.mboard.util.MBoardJBeanInitialization;
import org.fto.jthink.transaction.TransactionManager;
import org.fto.jthink.util.DateTimeHelper;
import org.jdom.Element;


/**
* 留言板,这个程序演示了对数据库的增、删、改、查等基本操作,以及如何从资源管理器中返回需要的资源,SQLExecutor监听器,
* 构建SQL语句,执行SQL语句,事务处理,日志处理等。
*
*
*
* @author   wenjian
* @version  1.0
* @since    JThink Sample Message Board 1.0
* @see     JThink 1.0
*
*/
public class MBoardJBean {
  /* 返回日志处理接口 */
  private static final Logger logger = LogManager.getLogger(MBoardJBean.class);

  /* 资源管理器 */
  private ResourceManager resManager;
  /* JThink中定义的Http请求 */
  private HttpRequest request;
  /* 事务管理器 */
  private TransactionManager transactionManager;
  /* 用于执行SQL语句 */
  private SQLExecutor sqlExecutor;
  /* 用于构建SQL语句 */
  private SQLBuilder sqlBuilder;
  /* 在fto-jthink.xml中定义的数据源连接ID */
  private static final String connId = "SampleDataSource";
 
  public MBoardJBean(){}
 
  /**
   * 构造方法
   * @param req HttpServletRequest请求
   * @throws Exception
   */
  public MBoardJBean(HttpServletRequest req) throws Exception{
    initialize(req);
  }
 
  /**
   * 初始化JavaBean
   * @param req
   * @throws Exception
   */
  public void initialize(HttpServletRequest req) throws Exception {
   
    /* 初始化JavaBean,返回资源管理器 */
    resManager = new MBoardJBeanInitialization().initialize(req);
   
    /* 返回客户请求 */
    request = (HttpRequest)resManager.getResource(HttpRequest.class.getName());
   
    /* 返回事务管理器 */
    transactionManager = (TransactionManager)resManager.getResource(TransactionManager.class.getName());
   
    /* 返回JDBC事务 */
    JDBCTransaction transaction = (JDBCTransaction)transactionManager.getTransaction(JDBCTransaction.class.getName());

    /* 创建SQLExecutor */
    sqlExecutor = transaction.getSQLExecutorFactory(connId).create();
   
    /* 设置SQLExecutor监听器 */
    sqlExecutor.addSQLExecutorListener(new SQLExecutorListener(){
      /* 监听器的事件方法,当在执行SQL语句时调用此方法 */
      public void executeSQLCommand(SQLExecutorEvent evt) {
        logger.debug(evt.getSQL().getSQLString());
      }
     
    });
   
    /* 创建SQLBuilder */
    sqlBuilder = transaction.getSQLBuilderFactory(connId).create("");
  }
 

 
  /**
   * 返回留言信息, 分页,每页10行
   */
  public List searchMessages() throws Exception{
    try{
      transactionManager.begin();
     
      /* 构建SQL语句 */
      SQL sql = sqlBuilder.constructSQLForSelect("Messages", false, null, null, "", "SendTime desc", (getPageOffset()-1)*getPageRows(), getPageRows());
      /* 执行SQL语句,并返回结果 */
      return (List)sqlExecutor.execute(sql);
     
     
    }finally{
      transactionManager.close();
    }
  }
 
  /**
   * 返回留言的总行数
   */
  public int getPageTotalRows(){
    if(request.getParameter("PAGE_ROW_TOTAL")!=null){
      return Integer.parseInt(request.getParameter("PAGE_ROW_TOTAL"));
    }
    try{
      transactionManager.begin();
     
      /* 构建SQL语句 */
      SQL sql = sqlBuilder.constructSQLForCount("Messages", "*", "ROW_COUNT", null);
     
      Element countEL = (Element)((List)sqlExecutor.execute(sql)).iterator().next();
     
      return Integer.parseInt(countEL.getAttributeValue("ROW_COUNT"));
     
    }finally{
      transactionManager.close();
    }
  }
 
  /**
   * 返回当前页偏移
   */
  public int getPageOffset(){
    return request.getParameter("PAGE_OFFSET")!=null?Integer.parseInt(request.getParameter("PAGE_OFFSET")):1;
  }
 
  /**
   * 返回每页显示的记录行数
   */
  public int getPageRows(){
    return 10;
  }
 
  /**
   * 返回总页数
   */
  public int getPages(int pageTotalRows){
    return pageTotalRows/getPageRows() + ((pageTotalRows%getPageRows())>0?1:0);
  }
 
  /**
   * 返回记录序号
   */
  public int getSeqNo(int i){
    return (getPageOffset()-1)*getPageRows()+i+1;
  }
 
 
  /**
   * 生成ID
   */
  private Integer generateID(){
    List maxIdLT = (List)sqlExecutor.executeQuery("SELECT MAX(ID) AS MAX_ID FROM Messages");
    Element maxIdEL = (Element)maxIdLT.iterator().next();
    if(maxIdEL.getAttributeValue("MAX_ID")==null){
      return new Integer(1);
    }
    return new Integer(Integer.parseInt(maxIdEL.getAttributeValue("MAX_ID"))+1);
  }
 
  /**
   * 发送留言信息
   */
  public void sendMessage() throws Exception{
    try{
      /* 开始事务 */
      transactionManager.begin();
     
      HashMap msgsHM = new HashMap();
      msgsHM.put("ID",generateID());
      putToHashMap(msgsHM, "Subject", request.getParameter("Subject"));
      putToHashMap(msgsHM, "Content", request.getParameter("Content"));
      putToHashMap(msgsHM, "Sender", request.getParameter("Sender"));
      putToHashMap(msgsHM, "Email", request.getParameter("Email"));
      putToHashMap(msgsHM, "Contact", request.getParameter("Contact"));
     
      msgsHM.put("IP", request.getServletRequest().getRemoteAddr());
      msgsHM.put("SendTime", DateTimeHelper.formatDateTimetoString(DateTimeHelper.getSystemDate()));
     
      SQL sql = sqlBuilder.constructSQLForInsert("Messages", msgsHM);
     
      /* 执行SQL语句 */
      sqlExecutor.execute(sql);
     
      /* 提交事务 */
      transactionManager.commit();
    }catch(Exception e){
      /* 回退事务 */
      transactionManager.rollback();
      throw e;
    }finally{
      /* 关闭事务 */
      transactionManager.close();
    }
  } 

 
  /**
   * 返回回复信息
   * @throws Exception
   */
  public Element getRevertInfo() throws Exception{
    try{
      transactionManager.begin();
     
      /* 返回的列 */
      Column[] column = {
        new Column("RevertContent"),
        new Column("Reverter"),
      };
     
      /* 条件 */
      Condition condition = new Condition();
      condition.add(new ConditionItem("ID","=", request.getParameter("ID")));
     
      /* 构建SQL语句 */
      SQL sql = sqlBuilder.constructSQLForSelect("Messages", column, condition);
      /* 执行SQL语句,并返回结果 */
      Iterator it = ((List)sqlExecutor.execute(sql)).iterator();
     
      if(it.hasNext()){
        return (Element)it.next();
      }else{
        throw new Exception("留言信息不存在,可能已经被删除!");
      }
    }finally{
      transactionManager.close();
    }

  } 
 
  /**
   * 回复留言信息
   */
  public void revertMessage() throws Exception{
   
   
    try{
      /* 开始事务 */
      transactionManager.begin();
     
      HashMap msgsHM = new HashMap();
     
      String revertContent = request.getParameter("RevertContent");
      if(revertContent!=null){
        msgsHM.put("RevertContent",revertContent);
      }else{
        msgsHM.put("RevertContent","");
      }
     
      String reverter = request.getParameter("Reverter");
      if(reverter!=null){
        msgsHM.put("Reverter",reverter);
      }else{
        msgsHM.put("Reverter","");
      }
     
      msgsHM.put("RevertTime", DateTimeHelper.formatDateTimetoString(DateTimeHelper.getSystemDate()));

      Condition condition = new Condition();
      condition.add(new ConditionItem("ID","=", request.getParameter("ID")));


      SQL sql = sqlBuilder.constructSQLForUpdate("Messages", msgsHM, condition);
     
      /* 执行SQL语句 */
      sqlExecutor.execute(sql);
     
      /* 提交事务 */
      transactionManager.commit();
    }catch(Exception e){
      /* 回退事务 */
      transactionManager.rollback();
      throw e;
    }finally{
      /* 关闭事务 */
      transactionManager.close();
    }
  } 
  /**
   * 删除留言信息
   */
  public void deleteMessage() throws Exception{
   
   
    try{
      /* 开始事务 */
      transactionManager.begin();
     
      Condition condition = new Condition();
      condition.add(new ConditionItem("ID","=", request.getParameter("ID")));
     
      SQL sql = sqlBuilder.constructSQLForDelete("Messages", condition);
     
      /* 执行SQL语句 */
      sqlExecutor.execute(sql);
     
      /* 提交事务 */
      transactionManager.commit();
    }catch(Exception e){
      /* 回退事务 */
      transactionManager.rollback();
      throw e;
    }finally{
      /* 关闭事务 */
      transactionManager.close();
    }
  } 

 
  /**
   * 向HashMap中压入对象,如果value等于null, 将被忽略
   */
  private void putToHashMap(HashMap hm, String name, Object value){
    if(value!=null){
      hm.put(name, value);
    }
  }
}
TOP

Related Classes of org.fto.jthink.sample.mboard.MBoardJBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.